Storage systems often use transactions to get atomic updates of on-disk data structures. For example, an update operation on a bitmap data structure to indicate certain blocks are now allocated and a write operation of the underlying blocks are performed atomically to ensure consistency of the storage system. Otherwise, if the storage system should crash or fail mid-operation, the storage system (specifically the bitmap and underlying data blocks) would be left in an inconsistent state. Isolation is another characteristic of storage systems, which ensures that concurrent (e.g., in parallel) execution of transactions results in a system state that would be obtained if the transactions were executed serially. Database systems have typically used data structures such as undo-redo logs to achieve isolation characteristics in relational database systems. However, because of the overhead incurred by undo-redo logs, file and storage systems have conventionally used redo-only logs to get fast transactions which cannot be aborted.